﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Collections;

namespace LI4.Data
{
    class Operador
    {
        private Ligacao ligacao;
        
        public Operador()
        {
            ligacao = new Ligacao();
        }

        public int remover(Business.Operador op)
        {

            string descricao = "Inactivou conta de operador: " + op.Login.Username + ".";
            SqlParameter[] paramts = new SqlParameter[6];
            string data = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");

            paramts[0] = new SqlParameter();
            paramts[0].ParameterName = "@return_value";
            paramts[0].SqlDbType = System.Data.SqlDbType.Int;
            paramts[0].Direction = System.Data.ParameterDirection.ReturnValue;

            paramts[1] = new SqlParameter("@username", op.Login.Username);
            paramts[2] = new SqlParameter("@tipo", op.Login.Tipo);
            paramts[3] = new SqlParameter("@registoD", descricao);
            paramts[4] = new SqlParameter("@data", data);
            paramts[5] = new SqlParameter("@userOp", Program.Login.Username);


            try
            {
                ligacao.runProcedure("dbo.removerOperador", paramts);
            }
            catch { }

            return (int)ligacao.mySqlCommand.Parameters[0].Value;
        }


        public int update(Business.Operador op)
        {
            string descricao = "Editou operador: " + op.Login.Username + ".";
            SqlParameter[] paramts = new SqlParameter[15];
            string data = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");

            paramts[0] = new SqlParameter();
            paramts[0].ParameterName = "@return_value";
            paramts[0].SqlDbType = System.Data.SqlDbType.Int;
            paramts[0].Direction = System.Data.ParameterDirection.ReturnValue;

            paramts[1] = new SqlParameter("@username", op.Login.Username);
            paramts[2] = new SqlParameter("@nome", op.Nome);
            paramts[3] = new SqlParameter("@rua", op.Rua);
            paramts[4] = new SqlParameter("@cod_postal", op.CodPostal);
            paramts[5] = new SqlParameter("@telefone", op.Telefone);
            paramts[6] = new SqlParameter("@mail", op.Mail);
            paramts[7] = new SqlParameter("@contribuinte", op.Contribuinte);
            paramts[8] = new SqlParameter("@posto", op.Posto);
            paramts[9] = new SqlParameter("@cod_localidade", op.Localidade.CodLocalidade);
            paramts[10] = new SqlParameter("@password", op.Login.Password);
            paramts[11] = new SqlParameter("@tipo", op.Login.Tipo);
            paramts[12] = new SqlParameter("@registoD", descricao);
            paramts[13] = new SqlParameter("@data", data);
            paramts[14] = new SqlParameter("@userOp", Program.Login.Username);
            try
            {
                ligacao.runProcedure("dbo.updateOperador", paramts);
            }
            catch { }

            return (int)ligacao.mySqlCommand.Parameters[0].Value;
        }


        public int inserirOperador(Business.Operador op)
        {
            string descricao = "Inseriu operador: " + op.Login.Username + ".";
            SqlParameter[] paramts = new SqlParameter[15];
            string data = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");

            paramts[0] = new SqlParameter();
            paramts[0].ParameterName = "@return_value";
            paramts[0].SqlDbType = System.Data.SqlDbType.Int;
            paramts[0].Direction = System.Data.ParameterDirection.ReturnValue;

            paramts[1] = new SqlParameter("@username", op.Login.Username);
            paramts[2] = new SqlParameter("@nome", op.Nome);
            paramts[3] = new SqlParameter("@rua", op.Rua);
            paramts[4] = new SqlParameter("@cod_postal", op.CodPostal);
            paramts[5] = new SqlParameter("@telefone", op.Telefone);
            paramts[6] = new SqlParameter("@mail", op.Mail);
            paramts[7] = new SqlParameter("@contribuinte", op.Contribuinte);
            paramts[8] = new SqlParameter("@posto", op.Posto);
            paramts[9] = new SqlParameter("@cod_localidade", op.Localidade.CodLocalidade);
            paramts[10] = new SqlParameter("@password", op.Login.Password);
            paramts[11] = new SqlParameter("@tipo", op.Login.Tipo);
            paramts[12] = new SqlParameter("@registoD", descricao);
            paramts[13] = new SqlParameter("@data", data);
            paramts[14] = new SqlParameter("@userOp", Program.Login.Username);
            try
            {
                ligacao.runProcedure("dbo.inserirOperador", paramts);
            }
            catch { }

            return (int)ligacao.mySqlCommand.Parameters[0].Value;
        }

        public Business.Operador getOperador(string username)
        {
            Data.Login log = new Data.Login();
            Data.Localidade localData = new Localidade();

            Business.Operador operador = new LI4.Business.Operador();
            Business.Login login = new LI4.Business.Login(log.getLogin(username));
            Business.Localidade local;


            SqlDataReader reader;

            ligacao.Select("SELECT * FROM Funcionarios where username='" + username + "';");

            reader = ligacao.mySqlDataReader;
            if (reader.Read())
            {
                string user = reader.GetString(0);
                string nome = reader.GetString(1);
                string rua = reader.GetString(2);
                string cod_postal = reader.GetString(3);
                int telefone = reader.GetInt32(4);
                string mail = reader.GetString(5);
                int contribuinte = reader.GetInt32(6);
                int posto = reader.GetInt32(7);
                int cod_local = reader.GetInt32(8);

                reader.Close();

                local = new LI4.Business.Localidade(localData.getLocalidade(cod_local));

                operador = new LI4.Business.Operador(nome, rua, cod_postal, telefone, mail, contribuinte, posto, local, login);

            }

            reader.Close();

            return operador;
        }
        public bool exiteOperador(string username)
        {
            SqlDataReader reader;

            ligacao.Select("SELECT username FROM Funcionarios where username='" + username + "';");
            reader = ligacao.mySqlDataReader;
            bool existe = reader.Read();
            reader.Close();

            return existe;
        }

        public ArrayList getOperadores()
        {

            ArrayList array = new ArrayList();



            Data.Login log = new Data.Login();

            Data.Localidade localData = new Localidade();



            Business.Operador operador = new LI4.Business.Operador();

            Business.Login login;

            Business.Localidade local;





            SqlDataReader reader;



            ligacao.Select("SELECT * FROM Funcionarios");



            reader = ligacao.mySqlDataReader;



            while (reader.Read())
            {

                string user = reader.GetString(0);

                string nome = reader.GetString(1);

                string rua = reader.GetString(2);

                string cod_postal = reader.GetString(3);

                int telefone = reader.GetInt32(4);

                string mail = reader.GetString(5);

                int contribuinte = reader.GetInt32(6);

                int posto = reader.GetInt32(7);

                int cod_local = reader.GetInt32(8);





                local = new LI4.Business.Localidade(localData.getLocalidade(cod_local));

                login = new LI4.Business.Login(log.getLogin(user));



                operador = new LI4.Business.Operador(nome, rua, cod_postal, telefone, mail, contribuinte, posto, local, login);



                array.Add(operador);



            }



            reader.Close();



            return array;

        }
    }
}
